package com.hfy.music.service.impl;

import com.hfy.model.vo.CanAddSheetVo;
import com.hfy.model.vo.SheetVo;
import com.hfy.music.mapper.SheetMusicMapper;
import com.hfy.music.service.SheetMusicService;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import result.Result;

import java.util.List;

/**
 * @ author 韩
 * time: 2024/5/29 18:35
 */

@Service
public class SheetMusicServiceImpl implements SheetMusicService {

    @Autowired
    private SheetMusicMapper sheetMusicMapper;

    @Override
    public Result createSheet(Long account, String sheetName) {
        // 1.1 进行校验 是否为空
        if (account == null || StringUtils.isBlank(sheetName)) {
            return Result.error("参数为空");
        }
        // 1.2 不能超过20
        if (sheetName.trim().length() > 20) {
            return Result.error("歌单名最多20个字！");
        }
        // 1.3 是否重复

        try {
            sheetMusicMapper.createSheet(account,sheetName);
        } catch (Exception e) {

            return Result.error("操作失败！您输入的歌单名称和其他歌单有重复！");
        }
        return Result.ok();
    }

    @Override
    public Result updateSheet(String sheetName) {
        // 修改表名
        sheetMusicMapper.updateSheet(sheetName);

        return Result.ok("表名修改成功！");
    }

    @Override
    public Result deleteSheet(Integer sheetId) {
        // 删除指定id的表名
        sheetMusicMapper.deleteSheet(sheetId);
        return null;
    }

    @Override
    public Result addMusicToSheet(Integer sheetId, Integer musicId) {
        // 添加指定音乐到指定歌单
        try {
            sheetMusicMapper.addMusicToSheet(sheetId,musicId);
        } catch (Exception e) {
            // 数据不唯一
            return Result.error("已有该歌单");
        }

        return Result.ok("添加音乐到指定歌单成功！！！");
    }

    @Override
    public Result deleteMusicToSheet(Integer sheetId, Integer musicId) {

        // 添加指定音乐到指定歌单
        sheetMusicMapper.deleteMusicToSheet(sheetId,musicId);
        return Result.ok("删除指定歌单的音乐成功！！！");
    }

    @Override
    public Result showSheet(Long account) {
        // 取select对应account的歌单
        List<SheetVo> list = sheetMusicMapper.showSheet(account);
        return Result.ok(list);
    }

    @Override
    public Result showCanAddSheet(Long account, Integer musicId) {

        // 取select对应account的歌单
        List<CanAddSheetVo> list = sheetMusicMapper.showCanAddSheet(account);

        list.forEach(value -> {
            // 去查一下sql语句 在歌单音乐表中每个歌单是否有该音乐
            Integer rows = sheetMusicMapper.queryHaveFormSheet(value.getId(),musicId);
            value.setCanAdd(rows != null && rows > 0);
        });
        return Result.ok(list);
    }
}
